﻿using System;
using System.Collections;

namespace Stack类
{
	class Program
	{
		static void Main(string[] args)
		{
			//命名空间：System.Collections;
			//存放内容 Object[]
			//结构：先进后出 每一次只能增取一个
			Stack stack = new Stack();

			#region 增
			//压栈 
			stack.Push(1);
			stack.Push(true);
			stack.Push("123");

			#endregion

			#region 取
			//弹栈 ：每次会取一个；
			object v = stack.Pop();
			Console.WriteLine(v);
			v = stack.Pop();
			Console.WriteLine(v);
			#endregion

			#region 查
			//栈无法查看指定位置的元素
			//只能查看栈顶的内容
			v = stack.Peek();
			Console.WriteLine(v);
			v = stack.Peek();
			Console.WriteLine(v);

			//查看元素是否存在于栈中
			if (stack.Contains(1))
			{
				Console.WriteLine("存在元素1");
			}
			#endregion

			#region 改
			//栈无法改变其中的元素 只能压和取
			stack.Clear();
			stack.Push("123");
			stack.Push("321");
			#endregion

			#region 遍历
			Console.WriteLine(stack.Count); //栈长度

			//无法用for循环遍历
			foreach (object item in stack)
			{
				Console.WriteLine(item);
			}

			//转换栈成object数组
			object[] array = stack.ToArray();
			for (int i = 0; i < array.Length; i++)
			{
				Console.WriteLine(array[i]);
				//打印结果 321,123 转换过程也为先进后出
			}

			//循环弹栈 常用
			while (stack.Count > 0)
			{
				object o = stack.Pop();
				Console.WriteLine(o);
			}

			#endregion

		}


	}
}
